Software programming is typically performed by the use of high level programming languages in order to provide leverage to software developers and allow them to work at a higher level of abstraction than is directly afforded by the underlying hardware upon which their software will ultimately execute. By allowing software developers to work at a higher level of abstraction and utilizing the computer to map this abstraction into binary that may be executed upon a particular piece of hardware (e.g. by use of a compiler), the software developers are able to create ever more complex systems of code and achieve higher levels of productivity and reduced rates of errors or the introduction of bugs.
The present standard of organizing software systems into groups of files is a practice that reflects the historical needs of the computer more than the needs of the software developer. Accordingly there is a need for improved software development systems that better support the needs of the software developer.